ホームに戻る
出典 :
目次 :
WPFのイベントシステム : ルーティングイベント
WPFにおいては、コントロールの階層構造における親(外側の)要素から子(内側の)要素、およびその逆方向のイベント伝播が発生する。
これにより、発生元(子)のコントロールに限らず、親コントロールでもイベントを捕捉することができる。

Preview イベント
親要素から子要素へ伝わるトンネルイベントは、いずれも Preview から始まっている。それ以外はバブルイベントで、子要素から親要素へ伝わる。
この Preview イベントは、キーやマウスを操作した際に発生するイベント(以下「本イベント」)と対になっており、本イベントの直前に発生する。
例えば、キーを押下した際に発生する KeyDown イベントには、対応する PreviewKeyDown イベントが用意されており、
PreviewKeyDown がイベント発生元まで伝播した後に KeyDown が逆方向に伝播する。

なお、イベント引数( KeyDown イベントであれば KeyEventArgs 型)のプロパティ Handled をいずれかのハンドラ内で true にセットすると、
イベントが「処理済」となり、後続のイベントは発生しなくなる。
(上図の例では(2)内で KeyEventArgs.Handled = true とすると、(3)~(6)のイベントが発生しなくなる。)
捕捉できない操作
コントロールによっては、矢印、Tab、Enter、Escなどのキーは押されても KeyDown 、KeyUp のイベントが発生しない。
(例えば、TextBox の場合矢印キーが押下されても捕捉できない。)
PreviewKeyDown 、PreviewKeyUp ではこれらを捕捉することができる。